package genosAgape.dao;

import genosAgape.conexao.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ArvoreDAO {
	
	public List<Integer> getFilhos(int no) throws Exception{
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Connection conexao = Conexao.getConnection();
		String sql = "SELECT codigo_distribuidor FROM ga.die where codigo_patrocinador=?";
		List<Integer> filhos = new ArrayList<>();	
		try {
			pstmt = conexao.prepareStatement(sql);
			pstmt.setInt(1, no);
			rs = pstmt.executeQuery();
			while(rs.next())
				filhos.add(rs.getInt("codigo_distribuidor"));
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			rs.close();
			conexao.close();
			pstmt.close();
		}
		return filhos;
	}
	
	public int getPai(int no) throws SQLException, Exception{
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Connection conexao = Conexao.getConnection();
		String sql = "SELECT codigo_patrocinador FROM ga.die where  codigo_distribuidor=?";
		int pai=-1;	
		try {
			pstmt = conexao.prepareStatement(sql);
			pstmt.setInt(1, no);
			rs = pstmt.executeQuery();
			if(rs.next())
				pai = rs.getInt("codigo_patrocinador");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			rs.close();
			conexao.close();
			pstmt.close();
		}
		return pai;		
	}
	
	public List<String[]> getArvores(int no) throws SQLException, Exception{
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Connection conexao = Conexao.getConnection();
		String sql = "select (mes ||'-'|| ano) as arvore,ga.nivel.nome from ga.arvore_die inner ga.nivel on ga.nivel.id = ga.arvore_die.nivel where codigo_die=? order by ano DESC, mes DESC";
		pstmt = conexao.prepareStatement(sql);
		List<String[]> arvores = new ArrayList<>();
		pstmt.setInt(1, no);
		rs = pstmt.executeQuery();
		while(rs.next())
			arvores.add(new String[]{rs.getString("arvore"),rs.getString("nivel")});		
		return arvores;
	}
	
	public String[] getInformacoes(int no) throws SQLException, Exception{
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Connection conexao = Conexao.getConnection();
		String sql = "select die.nome ,count(filho.codigo_distribuidor) as qtd from ga.die die left join ga.die filho on die.codigo_distribuidor = filho.codigo_patrocinador where die.codigo_distribuidor = ? group by die.nome";
		pstmt = conexao.prepareStatement(sql);
		pstmt.setInt(1,no);
		String[] info = new String[2];
		rs = pstmt.executeQuery();
		rs.next();
		info[0] = "Nome :" + rs.getString("nome");
		info[1] = "Quantidade de Filhos: " + rs.getString("qtd");
		return info;
	}
}